如何建立自己的程式?
該從何下手?
首先開始計劃 ruby 專案,先思考自己想做什麼?這個專案要做什麼?可以先從一些簡單的東西開始,當知道想做什麼的時候,可以把步驟用簡單的話記錄下來,例如說你有一個裝滿mp3檔的資料夾然後想要依照檔案大小排列。
之前寫下的步驟可能是這樣:
1.把 mp3 檔的資料放進陣列
2.依照檔案大小排列
3.印出排列好的陣列
也許這不是做完美的做法但是沒關係,誰叫我菜。
現在就可以透過改善這些步驟當作練習。
現在發揮一些創意把你在 ruby 所學將這些步驟轉換成程式碼。試著將這些步驟換成問句,像這樣:
如何從 ruby 拿到這些檔案?
如何排序陣列?
如何找到檔案大小?
不知道怎麼做到以上這些步驟的話,去問 google
試著多讀幾次直到能夠完全理解:
如果看到像是這樣的錯誤訊息:
exception.rb:7:in 'bar': undefined local variable or method 'bacon'
from exception.rb:3:in 'foo'
from exception.rb:10:in 'main'
這個錯誤訊息是在說錯誤發生在 exception.rb 的第七行。就從這裡下手解決問題吧。
也會發現像是這樣的錯誤訊息類型:
undefined local variable or method 'bacon'
意思是說你試著使用名稱為 bacon 的變數或方法,但是 ruby 找不到。有可能是你打錯字或是你根本忘了建立這個變數。
還有其他常見的錯誤訊息會長這樣:
undefined method `foo` for nil:NilClass (NoMethodError)
這個也很常發生因為你試著在 nil 呼叫方法,當程式找不到你想要的東西的時候,許多的 ruby 指令都會回傳這個值給你。假設說你有一個陣列:
letters = ['a', 'b', 'c']
如果你想要從陣列中取得一個無效的值:
letters[5]
ruby 會允許你這樣做,但是你會得到一個 nil。然後你試著用這個值做些什麼:
letters[5].foo
就會得到一個 undefined method 錯誤訊息跟先前看到的一樣。另一個解決辦法就是在執行程式的時候先判斷是否為 nil 像這樣
if letters[5]
letters[5].foo
end
如果你發現其他你不懂的錯誤,就把錯誤訊息丟到 google ,透過查詢關鍵字你也會找到一些提示或方法告訴你如何解決。
當你試著將之前的步驟轉換成程式碼,通常就會知道你該做什麼事。像是說如果你是從一個字串開始,那字串方法應該就會非常有幫助。如果是從陣列開始那陣列方法就會是你想要查詢的方向。你可以在 ruby 文件裡找到所有可行的方法。
例如說如果有一個字串 “a,b,c,d” 然後想要把陣列拆開而且沒有逗號。那查詢的方向就會像是字串的 split 方法,一個快速的測試方法就是使用 irb
。如果你不知道有什麼方法可以使用可以先去查那個物件的類別是什麼再用關鍵字下去查,例如這樣:
"apple".class
當在處理字串的時候,但想要用陣列的方式下去做或是你正在處理整數但你想要用個別數字處理下面這些轉換的方法你都可以交替使用:
to_i String -> Integer
to_s Integer -> String
chars String -> Array (individual characters)
split String -> Array (split by spaces by default)
join Array -> String (join without spaces)
split & join 接受一個可選擇的參數,你可以用特定的符號分開或結合字串,如下:
"a-b-c".split("-")
# ["a", "b", "c"]
有時候你想要做的事情可能會比分拆或結合字串複雜許多,像是從網路上下載圖片或資料,那你可能就會想要找套件來用了。 ruby 套件就像是小型的 ruby 應用程式可以套用在你的程式裡面可以幫助你做到某些事。
例如:
Nokogiri 幫助你閱讀 html 程式碼取出更多資訊。
Thor 幫助你撰寫命令行應用程式
RSpec & Minitest 幫助你撰寫測試檢查程式是否正確運行
你不一定需要這些套件,但是套件可以幫你省下很多時間。